home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene Storm
/
Scene Storm - Volume 1.iso
/
coding
/
asm
/
pack
/
imploder
/
imp_implode.s
< prev
next >
Wrap
Text File
|
1980-01-03
|
9KB
|
569 lines
HeaderID = "IMP!"
test: lea src,a0 ;src buffer
move.l #len,d0 ;src length
moveq #11,d1 ;packmode : 0-11
bsr IMP_Pack
rts
******************************************************************************
* IMP-Implode
* -----------
* In: a0.l=*buffer
* d0.l=data length
* d1.l=crunch mode
*
* Out: d0.l=<>0:crunched length
******************************************************************************
cnop 0,4
IMP_Pack: movem.l d2-d7/a2-a6,-(sp)
moveq #88-1,d2
IMP01: clr.w -(sp)
dbf d2,IMP01
move.l sp,a6
cmp.l #$40,d0
blo IMP23
scs (a6)
move.l a0,10(a6)
move.l a0,$22(a6)
move.l a0,$26(a6)
move.l d0,$12(a6)
add.l d0,a0
move.l a0,14(a6)
lea IMPtab0(pc),a0
lsl.w #2,d1
move.l 0(a0,d1.w),d1
addq.l #1,d1
cmp.l d0,d1
bls.s IMP03
move.l d0,d1
subq.l #1,d1
IMP03: move.l d1,$1A(a6)
subq.l #1,d1
moveq #0,d0
IMP04: cmp.l (a0)+,d1
bls.s IMP05
addq.b #1,d0
bra.s IMP04
IMP05: move.b d0,1(a6)
lea $A4(a6),a1
moveq #12,d1
mulu d1,d0
lea IMPtab1(pc),a0
add.l d0,a0
subq.w #1,d1
IMP06: move.b (a0)+,(a1)+
dbf d1,IMP06
lea $74(a6),a1
lea $A4(a6),a0
moveq #12-1,d1
IMP07: move.b (a0)+,d0
moveq #0,d2
bset d0,d2
move.l d2,(a1)+
dbf d1,IMP07
lea $74(a6),a0
lea $84(a6),a1
moveq #8-1,d1
IMP08: move.l (a0)+,d0
add.l d0,(a1)+
dbf d1,IMP08
tst.b (a6)
beq.s IMP11
lea $74(a6),a1
moveq #8-1,d0
IMP09: move.l (a1)+,d1
move.w d1,(a2)+
dbf d0,IMP09
lea $A4(a6),a1
moveq #12-1,d0
IMP10: move.b (a1)+,(a2)+
dbf d0,IMP10
IMP11: move.b #7,$2D(a6)
IMP12:
bsr IMP28
beq.s IMP15
bsr IMP55
bne.s IMP13
lea $1e(a6),a5
addq.l #1,(a5)+ ;$1e
move.l (a5),a0 ;$22
addq.l #1,(a5)+ ;$22
move.l (a5),a1 ;$26
move.b (a0),(a1)
addq.l #1,(a5) ;$26
addq.l #1,$30(a6) ;$30
cmp.l #$4012,$30(a6)
blo.s IMP12
bra.s IMP15
IMP13: move.b $5C(a6),d0
move.l $60(a6),d1
bsr IMP37
move.b $5E(a6),d0
move.w $66(a6),d1
bsr IMP37
move.b $5D(a6),d0
move.w $64(a6),d1
cmp.b #13,d0
bne.s IMP14
move.l $26(a6),a0
move.b d1,(a0)+
move.l a0,$26(a6)
moveq #5,d0
moveq #$1F,d1
IMP14: bsr IMP37
moveq #0,d0
move.l d0,$30(a6) ;clr.l $30(a6)
move.b $2E(a6),d0
add.l d0,$22(a6)
bra IMP12
cnop 0,4
IMP15: lea $1e(a6),a5
addq.l #1,(a5)+ ;$1e
move.l (a5),a0 ;$22
addq.l #1,(a5) ;$22
move.l (a5)+,d0 ;$22
move.l (a5),a1 ;$26
move.b (a0),(a1)
addq.l #1,(a5) ;$26
addq.l #1,$30(a6) ;$30
cmp.l 14(a6),d0
bne.s IMP15
tst.b (a6)
bne IMP19
move.l $26(a6),d0
sub.l 10(a6),d0
moveq #12,d1
cmp.l d1,d0 ;cmp.l #12,d0
blo IMP23
move.l $12(a6),d1
sub.l d0,d1
moveq #$36,d7
cmp.l d7,d1 ;cmp.l #$36,d1
bls IMP23
move.l 10(a6),a1
move.l $26(a6),a0
move.w #$ff00,d7 ;move.l #$FF00,d7
btst #0,d0
beq.s IMP16
moveq #0,d7
addq.l #1,d0
clr.b (a0)+
IMP16: move.l (a1),8(a0)
move.l #HeaderID,(a1)
move.l 4(a1),4(a0)
move.l $12(a6),4(a1)
move.l 8(a1),(a0)
move.l d0,8(a1)
moveq #$2e,d1
add.l d1,d0 ;add.l #$2E,d0
move.l d0,$16(a6)
move.l $30(a6),12(a0)
move.b $2C(a6),d1
and.w #$FE,d1
move.b $2D(a6),d0
bset d0,d1
or.w d7,d1
move.w d1,$10(a0)
lea $74(a6),a1
lea $12(a0),a0
moveq #8-1,d0
IMP17: move.l (a1)+,d1
move.w d1,(a0)+
dbf d0,IMP17
lea $A4(a6),a1
moveq #12-1,d0
IMP18: move.b (a1)+,(a0)+
dbf d0,IMP18
bra.s IMP23
cnop 0,4
IMP19: move.l $26(a6),d0
sub.l 10(a6),d0
move.l $12(a6),d1
sub.l d0,d1
moveq #6,d2
cmp.l d2,d1 ;cmp.l #6,d1
bls.s IMP23
move.b $2C(a6),d1
and.b #$FE,d1
move.b $2D(a6),d2
bset d2,d1
move.l $26(a6),a0
btst #0,d0
beq.s IMP20
move.b d1,(a0)+
move.l $30(a6),(a0)
bra.s IMP21
cnop 0,4
IMP20: move.l $30(a6),(a0)+
move.b d1,(a0)
IMP21: addq.l #5,d0
move.l d0,$16(a6)
bra.s IMP23
IMP22: moveq #-1,d0
bra.s IMP24
cnop 0,4
IMP23: move.l $16(a6),d0
IMP24: moveq #88-1,d2
IMP25: clr.w (sp)+
dbf d2,IMP25
movem.l (sp)+,d2-d7/a2-a6
tst.l d0
rts
IMPtab0: dc.l 128
dc.l 256
dc.l 512
dc.l 1024
dc.l 1792
dc.l 3328
dc.l 5376
dc.l 9472
dc.l 20736
dc.l 37376
dc.l 67840
dc.l 67840
IMPtab1: dc.l $5050505,$5050505,$6060606,$5060707,$6060606,$7070606
dc.l $5060707,$7070707,$8080808,$5060708,$7070808,$8080909
dc.l $6070708,$7080909,$8090A0A,$6070708,$709090A,$80A0B0B
dc.l $6070808,$709090A,$80A0B0C,$6070808,$709090A,$90A0C0D
dc.l $6070708,$709090C,$90A0C0E,$6070809,$7090A0C,$90B0D0F
dc.l $6070808,$70A0B0B,$90C0D10,$6080809,$70B0C0C,$90D0E11
IMPtab2: dc.l $2060E,$1020304
IMPtab3: dc.l $1010101,$2030304,$405070E
IMPtab4: dc.l $20002
dc.l $20002
dc.l $6000A
dc.l $A0012
dc.l $16002A
dc.l $8A4012
cnop 0,4
IMP28: move.l $22(a6),a5
move.l 14(a6),d4
move.l a5,d0
addq.l #1,d0
add.l $1A(a6),d0
cmp.l d4,d0
bls.s IMP29
move.l d4,d0
move.l d0,d1
sub.l a5,d1
cmp.l #3,d1
bcc.s IMP29
moveq #0,d0
rts
cnop 0,4
IMP29: move.l d0,d5
move.l a5,a2
addq.l #1,a2
move.l a2,a4
moveq #1,d7
move.b (a5),d3
lea $34(a6),a3
IMP30: cmp.b (a2)+,d3
beq.s IMP32
cmp.b (a2)+,d3
beq.s IMP32
cmp.b (a2)+,d3
beq.s IMP32
cmp.b (a2)+,d3
beq.s IMP32
cmp.b (a2)+,d3
beq.s IMP32
cmp.b (a2)+,d3
beq.s IMP32
cmp.b (a2)+,d3
beq.s IMP32
cmp.b (a2)+,d3
beq.s IMP32
cmp.b (a2)+,d3
beq.s IMP32
cmp.b (a2)+,d3
beq.s IMP32
cmp.b (a2)+,d3
beq.s IMP32
cmp.b (a2)+,d3
beq.s IMP32
cmp.b (a2)+,d3
beq.s IMP32
cmp.b (a2)+,d3
beq.s IMP32
cmp.b (a2)+,d3
beq.s IMP32
cmp.b (a2)+,d3
beq.s IMP32
cmp.l a2,d5
bhi.s IMP30
IMP31: moveq #-1,d0
rts
cnop 0,4
IMP32: cmp.l a2,d5
bls.s IMP31
move.l a4,a0
move.l a2,a1
cmpm.b (a0)+,(a1)+
bne.s IMP30
cmpm.b (a0)+,(a1)+
bne.s IMP35
cmpm.b (a0)+,(a1)+
bne.s IMP34
move.w #252-1,d0
IMP33: cmpm.b (a0)+,(a1)+
dbne d0,IMP33
IMP34: cmp.l d4,a1
bls.s IMP35
move.l d4,a1
IMP35: move.l a1,d6
sub.l a2,d6
cmp.w d6,d7
bcc.s IMP30
move.w d6,d7
cmp.w #8,d6
bhi.s IMP36
tst.b -2(a3,d6.w)
bne IMP30
move.b d6,-2(a3,d6.w)
move.l a2,d0
sub.l a5,d0
subq.l #2,d0
move.w d6,d1
move.w d1,$dff180
; lsl.w #2,d1
move.l d0,0(a3,d1.w*4) ;`020
bra IMP30
cnop 0,4
IMP36: move.b d6,7(a3)
move.l a2,d0
sub.l a5,d0
subq.l #2,d0
move.l d0,$24(a3)
cmp.b #$FF,d6
bne IMP30
bra.s IMP31
cnop 0,4
IMP37: move.b $2C(a6),d2
move.b $2D(a6),d3
move.l $26(a6),a0
IMP38: lsr.l #1,d1
roxr.b #1,d2
subq.b #1,d3
bpl.s IMP39
moveq #7,d3
move.b d2,(a0)+
moveq #0,d2
IMP39: subq.b #1,d0
bne.s IMP38
move.l a0,$26(a6)
move.b d3,$2D(a6)
move.b d2,$2C(a6)
rts
cnop 0,4
IMP40: and.l #$FF,d0
cmp.b #13,d0
bhi.s IMP42
cmp.b #5,d0
bhi.s IMP41
lea IMPtab2(pc),a0
move.b -2(a0,d0.w),$71(a6)
move.b 2(a0,d0.w),$69(a6)
bra.s IMP44
cnop 0,4
IMP41: subq.b #6,d0
or.b #$F0,d0
move.b d0,$71(a6)
move.b #8,$69(a6)
bra.s IMP43
cnop 0,4
IMP42: move.b #$1F,$70(a6)
move.b d0,$71(a6)
move.b #13,$69(a6)
IMP43: moveq #5,d0
IMP44: subq.b #2,d0
move.l $30(a6),d2
lea IMPtab3(pc),a1
lea IMPtab4(pc),a0
add.l d0,a0
add.l d0,a0
cmp.w (a0),d2
bcc.s IMP45
move.b 0(a1,d0.w),d6
move.b d6,d3
addq.b #1,d3
sf $73(a6) ;move.b #0,$73(a6)
moveq #0,d4
bra.s IMP48
cnop 0,4
IMP45: cmp.w 8(a0),d2
bcc.s IMP46
move.b 4(a1,d0.w),d6
move.b d6,d3
addq.b #2,d3
move.b #2,$73(a6)
move.w (a0),d4
bra.s IMP48
cnop 0,4
IMP46: cmp.w $10(a0),d2
blo.s IMP47
moveq #0,d0
rts
cnop 0,4
IMP47: move.b 8(a1,d0.w),d6
move.b d6,d3
addq.b #2,d3
move.b #3,$73(a6)
move.w 8(a0),d4
IMP48: move.b d3,$6A(a6)
sub.w d4,d2
moveq #$10,d5
sub.b d6,d5
lsl.w d5,d2
IMP49: add.w d2,d2
roxl $72(a6)
subq.b #1,d6
bne.s IMP49
lea $A4(a6),a1
lea $74(a6),a0
add.w d0,a0
add.w d0,a0
add.w d0,a0
add.w d0,a0
cmp.l (a0),d1
bcc.s IMP50
move.b 0(a1,d0.w),d6
move.b d6,d3
addq.b #1,d3
moveq #0,d7
move.l d7,d4
bra.s IMP53
IMP50: cmp.l $10(a0),d1
bcc.s IMP51
move.b 4(a1,d0.w),d6
move.b d6,d3
addq.b #2,d3
moveq #2,d7
move.l (a0),d4
bra.s IMP53
IMP51: cmp.l $20(a0),d1
blo.s IMP52
moveq #0,d0
rts
cnop 0,4
IMP52: move.b 8(a1,d0.w),d6
move.b d6,d3
addq.b #2,d3
moveq #3,d7
move.l $10(a0),d4
IMP53: move.b d3,$68(a6)
sub.l d4,d1
moveq #$20,d5
sub.b d6,d5
lsl.l d5,d1
IMP54: add.l d1,d1
addx.l d7,d7
subq.b #1,d6
bne.s IMP54
move.l d7,$6C(a6)
moveq #-1,d0
rts
cnop 0,4
IMP55: clr.w $2A(a6)
clr.b $2E(a6)
lea $34(a6),a4
lea $3C(a6),a5
IMP56: move.l (a5)+,d1
move.b (a4)+,d0
beq.s IMP58
bsr IMP40
beq.s IMP58
moveq #0,d0
moveq #0,d1
move.b -1(a4),d0
lsl.w #3,d0
add.b $69(a6),d1
add.b $68(a6),d1
add.b $6A(a6),d1
sub.w d1,d0
bmi.s IMP58
cmp.w $2A(a6),d0
blo.s IMP58
move.w d0,$2A(a6)
move.b -1(a4),$2E(a6)
lea $5C(a6),a0
lea $68(a6),a1
moveq #13-1,d1
IMP57: move.b (a1)+,(a0)+
dbf d1,IMP57
IMP58: move.l a4,d0
sub.l a6,d0
cmp.w #$3C,d0
bne.s IMP56
clr.l -(a4)
clr.l -(a4)
tst.w $2E(a6)
rts
src: incbin 'sys:IMP.s'
srcend:
len = srcend-src